﻿using Prism.Events;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Zhy.MvvmBaseObject
{
    /// <summary>
    /// MainWindow主窗体页面
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow(IEventAggregator eventAggregator)
        {
            InitializeComponent();
            this.DataContext = new MainViewModel();

            // 1、获取消息总线对象：通过注入的方式获取
            // 2、通过消息对象进行订阅或者发布
            // 总线   事件对象
            #region 消息订阅
            // (1)订阅无参
            eventAggregator
                .GetEvent<EventMessage>()
                .Subscribe(Receive);


            // 全局静态处理
            // 订阅带参
            // (2)多个参数就封装成一个类
            Messenger.Defualt.GetEvent<EventMessageArgs>()
                .Subscribe(Receive);

            // (3)传参之后，执行返回 

            // (4)  明晚继续...
            #endregion

            #region 消息发布  A类
            // 执行上面订阅注册的无参方法
            eventAggregator.GetEvent<EventMessage>()
                .Publish();

            // // 执行上面订阅注册的有参方法
            Messenger.Defualt.GetEvent<EventMessageArgs>()
                .Publish("Hello");

            // // 执行上面订阅注册的有参方法
            // 1、先执行这里   发布
            Messenger.Defualt.GetEvent<EventMessageAction>()
                .Publish(new EventAction()
                {
                    // 3、后面还有逻辑
                    ResultAction = new Action<bool>(state =>
                    {
                        // ....... 后续逻辑都在这个里面执行
                    })
                });



            //


            // 线程发布
            // 主线程：UI线程
            //Task.Run(() =>
            //{
            Messenger.Defualt.GetEvent<EventMessageArgs>()
                .Publish(new DataModel { Id = 2, Text = "Hello" });
            //});
            #endregion
        }

        /// <summary>
        /// 无参数触发
        /// </summary>
        private void Receive()
        {

        }

        /// <summary>
        /// 带参数触发
        /// </summary>
        /// <param name="arg"></param>
        private void Receive(object arg)
        {

        }
    }
}